package MAIN;
//笔试强训第40天
/*选择题*/
/*上网时访问某个页面突然出现了某个运营商的网页（如：联通，电信），出现此问题的原因可能是：
* DNS劫持，又称域名劫持，是指在劫持的网络范围内拦截域名解析的请求，分析请求的域名，把
* 审查范围以外的请求放行，否则返回加到IP地址或者什么都不做是请求失去响应，其效果就是对
* 特定的网络不能反应或范根的是假网址*/
/*DDos攻击：多个计算机联合起来作为攻击平台，对一个或多个目标发动DDos攻击，Dos攻击就是
* 攻击消耗服务器的资源，之后服务器的资源耗尽之后就无法进行对正常的请求提供资源*/
/*http请求报文Header中包含的Connection可以有两个选项，如果是 keep-Alive就是长连接
* Close就是短连接，就是在服务器给了客户端一个响应之后连接就断开了*/
/*RTT：报文往返时间  拥塞窗口：接收方缓存中剩余内存的大小
* 接收窗口：发送方给接收方这一次要传输数据的大小*/
/*POP3：邮件协议版本3，是TCP/IP协议族中的一员。如果使用了SSL加密的POP3协议被称为POP3S*/
/*分用就是把传输层的数据给应用层，复用就是把传输层的数据给网络层
* UDP提供分用和复用就是向上对应用层提供服务，向下网络层对传输层提供服务*/
/*UDP是有差错校验的，但是不能保证数据一定就是可靠的*/


import java.util.Scanner;

public class Main40 {
    //发邮件
    public static void main1(String[] args) {
        long[] arr = new long[21];
        arr[2] = 1;
        for (int i = 3; i < 21; i++) {
            arr[i] = (i-1) * (arr[i-1] + arr[i-2]);
        }
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt();
            System.out.println(arr[n]);
        }
    }

    //最长递增子序列
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            int n = scan.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = scan.nextInt();
            }
            //求arr数组中最长公共子序列
            System.out.println(LIS(arr, n));
        }
    }

    private static int LIS(int[] arr, int n) {
        //保存以arr[i] 结尾的序列最长上升子序列元素的个数
        int[] dp = new int[n];
        dp[0] = 1;
        int result = 1;
        for (int i = 1; i < n; i++) {
            //求以arr[i]结尾的序列的最长上升子序列的个数
            //将arr[i]和arr[0] - arr[i-1] 比较
            //arr[i] > arr[j] : dp[i] = max(dp[i], dp[j] + 1)
            dp[i] = 1;
            for (int j = 0; j < i; j++) {
                if (arr[i] > arr[j]) dp[i] = Math.max(dp[i], dp[j] + 1);
            }
            //求目前最大的最长的上升子序列
            result = Math.max(result, dp[i]);
        }
        //需要在所有的状态中找到最大值
        return result;
    }
}
